package src.main.StructuralPatterns.Proxy;

import src.main.StructuralPatterns.Proxy.JDK.DatabaseService;
import src.main.StructuralPatterns.Proxy.JDK.DatabaseServiceImpl;
import src.main.StructuralPatterns.Proxy.JDK.TimingHandler;
import src.main.StructuralPatterns.Proxy.Static.FileAccess;
import src.main.StructuralPatterns.Proxy.Static.FileAccessProxy;

import java.lang.reflect.Proxy;

public class Client {
    public static void main(String[] args) {
        FileAccess fileAccess = new FileAccessProxy("admin");
        fileAccess.readFile("aaa.txt");
        fileAccess.writeFile("aaa.txt");

        FileAccess fileAccessProxy = new FileAccessProxy("user");
        fileAccessProxy.readFile("aaa.txt");
        fileAccessProxy.writeFile("aaa.txt");

        // JDK动态代理
        DatabaseService realService = new DatabaseServiceImpl();

        DatabaseService proxy = (DatabaseService) Proxy.newProxyInstance(
                realService.getClass().getClassLoader(),
                realService.getClass().getInterfaces(),
                new TimingHandler(realService));

        proxy.insert("ccc");
        proxy.delete("ccc");
    }
}
